str(gapminder)
## Classes 'tbl_df', 'tbl' and 'data.frame': 1704 obs. of 6 variables:
## $ country : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ year : int 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
## $ lifeExp : num 28.8 30.3 32 34 36.1 ...
## $ pop : int 8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ...
## $ gdpPercap: num 779 821 853 836 740 ...
# el símbolo <- representa asignación, por lo que podemos guardar nuestro gráfico en una variable o directamente eecutarlo, como lo hicimos anteriormente.
p <- ggplot(data = gapminder)
Importante:cada vez que querramos agregar una capa utilizamos el operador +.
Elegimos la variable continent para relacionarla con el atributo color, es decir, color=continent, por el cual se asignará un color por cada valor distinto de la variable continente. Y a la variable pop, o población la relacionamos con el atributo size (tamaño).
#out.width="100%"
p <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp, color=continent))
p
p + geom_point()
# p<- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp, color=continent)) +
# geom_point()
p
En la figura anterior podemos observar la relación existente entre el ingreso bruto per cápita y la esperanza de vida de cada país.
# A partir de acá comenzaremos a codear el gráfico completo para que se a más claro el proceso:
# p + coord_cartesian()+
# scale_x_log10()
p <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent))+
geom_point()+
coord_cartesian()+
scale_x_log10()
p
# p + labs(x = "Ingreso (GDP) Per Capita", y = "Esperanza de vida en años",
# title = "Relación entre el ingreso per cápita y y esperanza de vida",
# subtitle = "Los puntos se representan por año-país",
# caption = "DataSource: Gapminder.")+
#guides(color = guide_legend(override.aes = list(size = 5)))
ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent))+
geom_point()+
coord_cartesian()+
scale_x_log10()+
labs(x = "Ingreso (GDP) Per Capita", y = "Esperanza de vida en años",
title = "Crecimiento económico y esperanza de vida",
subtitle = "Los puntos se representan por año-país",
caption = "DataSource: Gapminder - Link: https://www.gapminder.org")+
guides(color = guide_legend(override.aes = list(size = 5)))
# con la capa de 'labs' o 'etiquetas' agrego título, subtítulot y el caption al gráfico.
# con la capa de 'guides' o 'guía' le asigno formato a las formas (puntos) de la leyenda correspondiente a la variable continente.
¿Y si queremos cambiar el color?
Existen muchas paletas y cada una ofrece diferentes opciones, por ejemplo la paleta RColorBrewer ofrece las siguientes:
library(RColorBrewer)
# Todas las opciones
display.brewer.all()
# Las opciones de paletas cualitativas
display.brewer.all(type = "qual")
pSet2 <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent))+
geom_point()+
scale_color_brewer(palette="Set2")+
coord_cartesian()+
scale_x_log10()+
labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
title = "Crecimiento económico y esperanza de vida",
subtitle = "Los puntos se representan por año-país",
caption = "DataSource: Gapminder - Link: https://www.gapminder.org")+
guides(color = guide_legend(override.aes = list(size = 5)))
pSet2
pdark2 <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent))+
geom_point()+
scale_color_brewer(palette="Dark2")+
coord_cartesian()+
scale_x_log10()+
labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
title = "Crecimiento económico y esperanza de vida",
subtitle = "Los puntos se representan por año-país",
caption = "DataSource: Gapminder - Link: https://www.gapminder.org")+
guides(color = guide_legend(override.aes = list(size = 5)))
pdark2
pmanual <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent))+
geom_point()+
scale_color_manual(values = c("#41b6a6", "#f6e37c", "#f5a26b","#51b8df","#713580"), labels = c("Africa", "América","Asia", "Europa", "Oceanía"))+
coord_cartesian()+
scale_x_log10()+
labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
title = "Crecimiento económico y esperanza de vida",
subtitle = "Los puntos se representan por año-país",
caption = "DataSource: Gapminder - Link: https://www.gapminder.org")+
guides(color = guide_legend(override.aes = list(size = 5)))
pmanual
Para cambiar la apariencia del gráfico podemos agregar otra capa con un tema en particular, existen temas que vienen ya incluidos en ggplot2 como, por ejemplo:
theme_bw()theme_minimal()theme_dark()theme_gray()ptheme <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent))+
geom_point()+
scale_color_manual(values = c("#41b6a6", "#f6e37c", "#f5a26b","#51b8df","#713580"), labels = c("Africa", "América","Asia", "Europa", "Oceanía"))+
coord_cartesian()+
scale_x_log10()+
labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
title = "Crecimiento económico y esperanza de vida",
subtitle = "Los puntos se representan por año-país",
caption = "DataSource: Gapminder - Link: https://www.gapminder.org")+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_classic()
ptheme
p_theme_bw <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent))+
geom_point()+
scale_color_manual(values = c("#41b6a6", "#f6e37c", "#f5a26b","#51b8df","#713580"), labels = c("Africa", "América","Asia", "Europa", "Oceanía"))+
coord_cartesian()+
scale_x_log10()+
labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
title = "Crecimiento económico y esperanza de vida",
subtitle = "Los puntos se representan por año-país",
caption = "DataSource: Gapminder - Link: https://www.gapminder.org")+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_grey()
p_theme_bw
Renombrando las etiquetas de los valores de la leyenda correspondientes a la variable continente y cambiando su posición.
Cambiando la apariencia de las etiquetas del eje ‘x’ mediante la escala scale_x_log10.
Cambiando el tamaño y la fuente de los ejes ‘x’ e ‘y’.
p_refinado <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
geom_point(size=3,alpha=0.6)+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '', fill="Población")+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_classic()+
theme(legend.position="bottom")
p_refinado
Ahora vamos a cambiar el color de las etiquetas de la leyenda correspondiente a la variable continente y también le quitaremos el recuadro gris.
p_refinado2 <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
geom_point(size=3,alpha=0.6)+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= " ", alpha=" ")+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_light()+
theme(legend.position="bottom", legend.key= element_rect(fill="NA"),
legend.text= element_text(color="#2c204d",
size= 14),
legend.justification = "center")
p_refinado2
En el siguiente paso vamos a customizar el theme o tema, para lo cual definiremos dos parámetros text_size y margin_size, que luego utilizaremos para modificar el tamaño del título, subtítulo y leyenda.
#Para no repetir los mismos valores de tamaño en el theme, defino dos variable que utilizaré en el theme del gráfico.
text_size <-16 # tamaño base del texto
margin_size <- text_size/2 #de los margenes
pTheme_final <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color= continent))+
geom_point(size=3,alpha=0.6)+
#geom_point(aes(color=continent))+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '', fill="Población")+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_light()+
theme(legend.position="bottom", legend.key= element_rect(fill='NA'),
legend.text= element_text(color="#2c204d",
size= text_size),
legend.justification = "center",
plot.title = element_text(size=(text_size * 1.8),family ="Garamond",
hjust = 0.5,vjust = 1,
colour = "#2c204d", #
face = 'bold',
margin = margin(b = margin_size * 1.2)),
plot.subtitle = element_text(size = text_size * 1.3,
family ="Garamond", hjust = 0.5, vjust = 1,
colour = "#2c204d",
margin = margin(b = margin_size * 0.9)),
plot.caption = element_text(size = 11,family ="Garamond",
hjust = 1, vjust = 1,
colour = "#2c204d",
face='bold',
margin = margin(t = margin_size * 0.9)),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_line(color = "gray90", size = 0.5),
panel.grid.minor = element_line(color = "gray90", size = 0.25))
pTheme_final
ggsave(here("grafico_scatterplot1.png"), height = 8, width = 10, units = "in", type='cairo')
El objetivo es agregar una curva suavizada al gráfico, entonces vamos a agregar una capa en donde utilizaremos la funcion geom geom_smooth. Entre los métodos a aplicar con dicha función tenemos:
geom_smooth(method = "gam")geom_smooth(method = "lm")geom_smooth(method = "glm")geom_smooth(method = "loess")En nuestro caso, utilizaremos la primera opción (method = “gam”) y además aprovecharemos este paso para customizar la capa del ´themeotema`, así obtendremos el siguiente gráfico:
text_size <-16 # tamaño base del texto
margin_size <- text_size/2 #de los margenes
# Guardamos el gráfico en el objeto pTheme_final
pTheme_final <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp))+
geom_point(aes(color=continent),size=3,alpha=0.6)+
geom_smooth(method = 'gam', col = "#2c204d", size = 0.7,
fill = "gray60", alpha = 0.2)+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '', fill="Población")+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_light()+
theme(legend.position="bottom", legend.key= element_rect(fill='NA'),
legend.text= element_text(color="#2c204d",
size= text_size),
legend.justification = "center",
plot.title = element_text(size=(text_size * 1.8),family ="Garamond",
hjust = 0.5,vjust = 1,
colour = "#2c204d", #
face = 'bold',
margin = margin(b = margin_size * 1.2)),
plot.subtitle = element_text(size = text_size * 1.3,
family ="Garamond", hjust = 0.5, vjust = 1,
colour = "#2c204d",
margin = margin(b = margin_size * 0.9)),
plot.caption = element_text(size = 11,family ="Garamond",
hjust = 1, vjust = 1,
colour = "#2c204d",
face='bold',
margin = margin(t = margin_size * 0.9)),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_line(color = "gray90", size = 0.5),
panel.grid.minor = element_line(color = "gray90", size = 0.25))
# llamamos al objeto pTheme_final
pTheme_final
#Guardamos el gráfico
ggsave(here("grafico_scatterplot_smooth.png"), height = 8, width = 10, units = "in", type='cairo')
Vamos a separar por columnas con facet_wrap teniendo en cuenta la variable continente
p_facet <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
geom_point(size=3,alpha=0.6)+
geom_smooth(method = 'gam', col = "#2c204d", size = 0.7,
fill = "gray60", alpha = 0.2)+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '')+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_bw()+
theme(legend.position="bottom")+
facet_wrap(~continent, ncol = 2, scales="free")
p_facet
# Guardamos el gráfico
ggsave(here("grafico_facet.png"), height = 8, width = 10, units = "in", type='cairo')
El paquete hrbrthemes ofrece varias opciones de temas para aplicar a un gráfico, algunas son:
theme_ipsum()theme_ft_rc()theme_ipsum_ps()theme_ipsum_rc()theme_ipsum_tw()Utilizaremos la última opción, entonces obtendremos el siguiente gráfico:
# Cargó la librería, en este caso, voy a utilizar la opción theme_ipsum_tw()
library(hrbrthemes)
import_titillium_web
## function ()
## {
## tw_font_dir <- system.file("fonts", "titillium-web", package = "hrbrthemes")
## suppressWarnings(suppressMessages(extrafont::font_import(tw_font_dir,
## prompt = FALSE)))
## message(sprintf("You will likely need to install these fonts on your system as well.\n\nYou can find them in [%s]",
## tw_font_dir))
## }
## <bytecode: 0x000000001dc55000>
## <environment: namespace:hrbrthemes>
p_facet_ipsum_tw <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
geom_point(size=3,alpha=0.6)+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '')+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_ipsum_tw()+
theme(legend.position="bottom")+
facet_wrap(~continent, ncol = 2, scales="free")
p_facet_ipsum_tw
# ¿Guardamos el gráfico?
ggsave(here("grafico_facet_ipsum_tw.png"), height = 8, width = 10, units = "in", type='cairo')
En cambio, si utilizamos la primera opción, entonces obtendremos el siguiente gráfico:
p_facet_dark <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
geom_point(size=3,alpha=0.6)+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '')+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_ft_rc()+
theme(legend.position="bottom")+
facet_wrap(~continent, ncol = 2, scales="free")
p_facet_dark
# Guardamos el gráfico
ggsave(here("grafico_facet_dark.png"), height = 8, width = 10, units = "in", type='cairo')
Utilizaremos la librería patchwork para combinar dos gráficos (el gráfico pTheme_final con el gráfico facetado p_facet_ipsum_tw), pero antes debo generarlos nuevamente sin título, ni subtítulo ni caption, ya que esos elementos los agrego al unirlos con patchwork.
text_size <-16 # tamaño base del texto
margin_size <- text_size/2 #de los margenes
# generamos la primer figura p1
p1 <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp))+
geom_point(aes(color=continent),size=3,alpha=0.6)+
geom_smooth(method = 'gam', col = "#2c204d", size = 0.7,
fill = "gray60", alpha = 0.2)+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
color= '')+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme(legend.position="bottom", legend.key= element_rect(fill='NA'),
legend.text= element_text(color="#2c204d",
size= text_size),
legend.justification = "center",
plot.title = element_text(size=(text_size * 1.8),family ="Garamond",
hjust = 0.5,vjust = 1,
colour = "#2c204d", #
face = 'bold',
margin = margin(b = margin_size * 1.2)),
plot.subtitle = element_text(size = text_size * 1.3,
family ="Garamond", hjust = 0.5, vjust = 1,
colour = "#2c204d",
margin = margin(b = margin_size * 0.9)),
plot.caption = element_text(size = 11,family ="Garamond",
hjust = 1, vjust = 1,
colour = "#2c204d",
face='bold',
margin = margin(t = margin_size * 0.9)),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_line(color = "gray90", size = 0.5),
panel.grid.minor = element_line(color = "gray90", size = 0.25))
p1
# Generamos la segunda figura
p2 <-ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
geom_point(size=3,alpha=0.6)+
scale_x_log10(labels= scales::dollar)+
scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
labs(x="", y="Esperanza de vida en años",
color= '')+
guides(color = guide_legend(override.aes = list(size = 5)))+
theme_ipsum_tw()+
theme(legend.position="none", axis.text.y = element_text(size = 12))+
# con legend.position="none", elimino las leyendas de continente
facet_wrap(~continent, ncol = 2, scales="free") #
p2
ggsave(here("grafico_p2.png"), height = 8, width = 10, units = "in", type='cairo')
Combinamos los dos últimos gráficos realizados (p1 y p2),
library(patchwork)
patchwork <- p2 / p1 + #combino ambos gráficos
plot_annotation(title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.") &
theme (plot.title = element_text(size = 18), plot.subtitle = element_text(size = 14), plot.caption = element_text(size = 14))
# agrego título, subtítulo y caption
# defino el tamaño de las etiquetas
patchwork
### Guardamos el gráfico realizado con patchwork
ggsave(here("grafico_patchwork.png"), height = 12, width = 14, units = "in", type='cairo')
# Forma directa de utilizar plotly
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
ggplotly(pTheme_final)
## `geom_smooth()` using formula 'y ~ s(x, bs = "cs")'
ggplotly(p_facet)
## `geom_smooth()` using formula 'y ~ s(x, bs = "cs")'
ggplotly(p_facet_dark)
Libro Socviz de Kieran Healy
Workshop dictado por Kieran Healy en la Rstudioconf sobre Visualizacion de datos